package Funcionalidades.GestionarFixture;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import Entidades.EntidadesDTO.CompetenciaDTO;
import Entidades.EntidadesDTO.DatosDTO;
import Entidades.EntidadesDTO.EncuentroDTO;
import Entidades.EntidadesDTO.ParticipanteDTO;
import Entidades.EntidadesDTO.ResultadoPorPuntuacionFinalDTO;
import Entidades.EntidadesLogica.Competencia;
import Entidades.EntidadesLogica.Encuentro;
import Entidades.EntidadesLogica.Participante;
import Funcionalidades.Menues.FrameUsuarioAutenticado;
import Funcionalidades.Menues.iDialogGeneral;
import Gestores.GestorCompetencia;
import Gestores.GestorFixture;
import Gestores.GestorUsuario;

import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.BoxLayout;

public class GestionarPuntuacionFinal extends iDialogGeneral {

	private final JPanel panelDatos = new JPanel();

	private static final long serialVersionUID = 1L;
	
	private Encuentro encuentro;
	private Competencia competencia;
	private int ronda;
	
	private String r1="0";
	private String r2="0";
	

	public int getRonda() {
		return ronda;
	}



	public void setRonda(int ronda) {
		this.ronda = ronda;
	}
	private Vector<String> resultado;


	private GestorFixture gFixture;
	private GestorUsuario gUsuario;
	private GestorCompetencia gCompetencia;
	private JComboBox<String> cbParticipantes;

	


	public GestionarPuntuacionFinal(FrameUsuarioAutenticado pantallaPrincipal) {
		super(pantallaPrincipal,true);
		
		gFixture=gFixture.getGestorFixture();
		gUsuario=gUsuario.getGestorUsuario();

		Dimension tam= new Dimension(400, 250);
		setTamanio(tam);
		BorderLayout borderLayout = new BorderLayout();
		borderLayout.setVgap(5);
		borderLayout.setHgap(5);
		getContentPane().setLayout(borderLayout);
		
		JPanel panelTitulo = new JPanel();
		FlowLayout flowLayout = (FlowLayout) panelTitulo.getLayout();
		flowLayout.setHgap(0);
		flowLayout.setVgap(4);
		panelTitulo.setMaximumSize(panel);
		getContentPane().add(panelTitulo, BorderLayout.NORTH);
		
		JLabel lblTitulo = new JLabel("Gestionar Resultado ");
		lblTitulo.setFont(new Font("Vani", Font.PLAIN, 20));
		panelTitulo.add(lblTitulo);
		
		JPanel panelCentrar = new JPanel();
		getContentPane().add(panelCentrar, BorderLayout.CENTER);

		
				
		JPanel buttonPane = new JPanel();
		buttonPane.setMaximumSize(this.panel);
		panelCentrar.setLayout(new BoxLayout(panelCentrar, BoxLayout.Y_AXIS));
		panelCentrar.add(panelDatos);
		
		panelDatos.setBorder(new EmptyBorder(5, 5, 5, 5));
		panelDatos.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
		JLabel lblSeleccioneElParticipante = new JLabel("Ganador: ");
		lblSeleccioneElParticipante.setHorizontalTextPosition(SwingConstants.CENTER);
		lblSeleccioneElParticipante.setHorizontalAlignment(SwingConstants.CENTER);
		panelDatos.add(lblSeleccioneElParticipante);
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		panelDatos.add(horizontalStrut);
		
		resultado= new Vector<String>();

		
		cbParticipantes = new JComboBox<String>();
		panelDatos.add(cbParticipantes);
		cbParticipantes.setPreferredSize(datos);
		
		JPanel panelInasistencia = new JPanel();
		panelCentrar.add(panelInasistencia);
		panelInasistencia.setMaximumSize(panel);
		
		JButton btnNotificarInasistencia = new JButton("Notificar Inasistencia");
		panelInasistencia.add(btnNotificarInasistencia);
		btnNotificarInasistencia.setPreferredSize(new Dimension(200,30));
		btnNotificarInasistencia.addActionListener(new notificarInasistenciaAction(getFramePerteneciente()));
		
		Component glue2 = Box.createGlue();
		panelCentrar.add(glue2);
		
		buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		
		JButton okButton = new JButton("Aceptar");
		okButton.setActionCommand("OK");
		buttonPane.add(okButton);
		okButton.setPreferredSize(label);
		okButton.addActionListener(new aceptarAction());

		
		Component horizontalStrut3 = Box.createHorizontalStrut(20);
		buttonPane.add(horizontalStrut3);
		
		
		JButton cancelButton = new JButton("Cancelar");
		cancelButton.setActionCommand("Cancel");
		buttonPane.add(cancelButton);
		cancelButton.setPreferredSize(label);
		
		

	}
	public Encuentro getEncuentro() {
		return encuentro;
	}



	public void setEncuentro(Encuentro encuentro) {
		this.encuentro = encuentro;
	}



	public Competencia getCompetencia() {
		return competencia;
	}



	public void setCompetencia(Competencia competencia) {
		this.competencia = competencia;
	}

	
	class aceptarAction extends AbstractAction{

		
		private GestorCompetencia gCompetencia;

		public void actionPerformed(ActionEvent arg0) {
			
			gCompetencia=gCompetencia.getGestorCompetencia();
			Participante p1=encuentro.getParticipanteLocal();
			Participante p2=encuentro.getParticipanteVisitante();
			convertirResultado();
			competencia=gCompetencia.getCompetencia();
			CompetenciaDTO competenciaDTO=new CompetenciaDTO(competencia.getNombreCompetencia(),competencia.getDeporteAsociado(), competencia.getEstado(), null,gUsuario.getUsuarioLogueado());
		
			DatosDTO d1= new DatosDTO(p1.getDatosActuales().getNombre(), p1.getDatosActuales().getCorreoElectronico(), null, null);
			DatosDTO d2= new DatosDTO(p2.getDatosActuales().getNombre(), p2.getDatosActuales().getCorreoElectronico(), null, null);
			
			ParticipanteDTO pd1= new ParticipanteDTO(p1.getIdParticipante(),d1, null, null);
			ParticipanteDTO pd2= new ParticipanteDTO(p2.getIdParticipante(),d2,null,null);
			
			
			ResultadoPorPuntuacionFinalDTO rpf=new ResultadoPorPuntuacionFinalDTO(r1, r2, encuentro.getNum_encuentro(), null);
			
			EncuentroDTO enc= new EncuentroDTO(encuentro.getNum_encuentro(), null, null, pd1, pd2, null, null, null,null, rpf,  null);
			System.out.println(ronda);
			
			try {
				gFixture.modificarResultado(competenciaDTO, enc, ronda+1);
				gCompetencia.getGestorCompetencia();
				gCompetencia.setCompetencia(gCompetencia.getCompetencia(competencia.getNombreCompetencia(), competencia.getCreadaPor().getCorreo_electronico()));

			} catch (Throwable e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(getFramePerteneciente(), e.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
			}
			
			cerrarDialog();
			
		}
		
	}
	
	public void convertirResultado(){
		if(cbParticipantes.getSelectedIndex()==0){
			//empate
			r1="1";
			r2="1";
		}
		else if (cbParticipantes.getSelectedIndex()==1) {
			//Victoria local
			r1="1";
			r2="0";
			
		}
		else if (cbParticipantes.getSelectedIndex()==2){
			//victoria visitante
			r1="0";
			r2="1";
		}
		else{
				System.out.println("gestpuntacionfinal");
		}
		
	}
	
	public void actualizarCB(){
		
		resultado.add("EMPATE");
		resultado.add(encuentro.getParticipanteLocal().getDatosActuales().getNombre());
		resultado.add(encuentro.getParticipanteVisitante().getDatosActuales().getNombre());
		cbParticipantes.setModel(new DefaultComboBoxModel<String>(resultado));
	}
	
	class notificarInasistenciaAction extends AbstractAction{
		
		private static final long serialVersionUID = 1L;

		private int inasistente;
		
		private GestorFixture gFixture;
		private GestorUsuario gUsuario;
		private FrameUsuarioAutenticado frame;
		
		public notificarInasistenciaAction(FrameUsuarioAutenticado frame){
			super();
			this.frame=frame;
		}
		
		public void actionPerformed(ActionEvent arg0) {
			gFixture= gFixture.getGestorFixture();
			gUsuario= gUsuario.getGestorUsuario();
			gCompetencia=gCompetencia.getGestorCompetencia();

			
			Participante p1=encuentro.getParticipanteLocal();
			Participante p2=encuentro.getParticipanteVisitante();

			DatosDTO d1= new DatosDTO(p1.getDatosActuales().getNombre(), p1.getDatosActuales().getCorreoElectronico(), null, null);
			DatosDTO d2= new DatosDTO(p2.getDatosActuales().getNombre(), p2.getDatosActuales().getCorreoElectronico(), null, null);
			
			ParticipanteDTO pd1= new ParticipanteDTO(p1.getIdParticipante(),d1, null, null);
			ParticipanteDTO pd2= new ParticipanteDTO(p2.getIdParticipante(),d2,null,null);
			CompetenciaDTO competenciaDTO=new CompetenciaDTO(competencia.getNombreCompetencia(), competencia.getDeporteAsociado(), competencia.getEstado(), null,gUsuario.getUsuarioLogueado());
			
			
			notificarInasistencia iNotificar= new notificarInasistencia(getFramePerteneciente());
			iNotificar.actualizarCB(new Vector<String>(), encuentro);
			iNotificar.setRonda(ronda);
			iNotificar.setEncuentro(encuentro);
			iNotificar.activarDG();
			
			
			
			EncuentroDTO enc = null;
			
			if(inasistente==1){
				enc= new EncuentroDTO(encuentro.getNum_encuentro(), null, null, pd1, pd2, null, pd1, null, null, null, null);
			}
			else if(inasistente==2)
				enc= new EncuentroDTO(encuentro.getNum_encuentro(), null, null, pd1, pd2, null,null , pd2, null, null, null);

			
			try{
				if(inasistente!=1 &&inasistente!=2){
					System.out.println("Inasistente mal");
				}
				else{
					gFixture.modificarResultado(competenciaDTO, enc, ronda+1);
					JOptionPane.showMessageDialog(getFramePerteneciente(),"Se ha ingresado el resultado correctamente.","Felicitaciones!",   JOptionPane.INFORMATION_MESSAGE);
					competencia=gCompetencia.getCompetencia();
				}
					
			}
			catch(Throwable t){
				System.out.println(t.getMessage());
			}
			
			getParent().setFocusable(true);
			dispose();

		}
		
	}


}